#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>

void test01() {
    typedef union _protocol {
        uint8_t flag;
        struct {
            uint8_t bit0 : 1;
            uint8_t bit1 : 1;
            uint8_t bit2 : 1;
            uint8_t bit3 : 1;
            uint8_t bit4 : 1;
            uint8_t bit5 : 1;
            uint8_t bit6 : 1;
            uint8_t bit7 : 1;
        } flag_bits;
    } protocol_t;

    protocol_t prot;
    prot.flag = 0x81;
    printf("flags=%x, bit0=%d\n", prot.flag, prot.flag_bits.bit0);
}
void test02() {
    // typedef struct {
    //     uint16_t x;
    //     union {
    //         uint8_t flag;
    //         struct {
    //             uint8_t bit0 : 1;
    //             uint8_t bit1 : 1;
    //             uint8_t bit2 : 1;
    //             uint8_t bit3 : 1;
    //             uint8_t bit4 : 1;
    //             uint8_t bit5 : 1;
    //             uint8_t bit6 : 1;
    //             uint8_t bit7 : 1;
    //         } flag_bits;
    //     } ;
    // } protocol_t;

    // protocol_t prot;
    // prot.flag = 0x02;
    // printf("flags=%x, bit0=%d\n", prot.flag, prot.flag_bits.bit0);

    typedef struct {
        uint16_t x;
        union {
            uint8_t flag;
            struct {
                uint8_t bit0 : 1;
                uint8_t bit1 : 1;
                uint8_t bit2 : 1;
                uint8_t bit3 : 1;
                uint8_t bit4 : 1;
                uint8_t bit5 : 1;
                uint8_t bit6 : 1;
                uint8_t bit7 : 1;
            };
        } flags;
    } protocol_t;

    protocol_t prot;
    prot.flags.flag = 0x81;
    printf("flags=%x, bit0=%d\n", prot.flags.flag, prot.flags.bit0);
}

int main(int arc, char *argv[]) {
    test02();
    return 0;
}